#ifndef IDENTITY_OPERATOR_HPP
#define IDENTITY_OPERATOR_HPP

#include "ElementaryOperator.hpp"
#include "KetBra.hpp"
#include "Amplitude.hpp"
#include <string>

class IdentityOperator : public ElementaryOperator {
	public:
		IdentityOperator() {};
		IdentityOperator(const IdentityOperator& other) {};
		IdentityOperator& operator=(const IdentityOperator& rhs);
		virtual ~IdentityOperator() {};

		std::string show() const { return "Id"; };
    ElementaryOperatorP matMul(const ElementaryOperator& right) const;
    ElementaryOperatorP concreteMatMul(const KetBra& left) const;
    ElementaryOperatorP concreteMatMul(const IdentityOperator& left) const;
};

#endif

